#include <REG51.h>
#include "max7219.h"

/**
 * 定时器1每0.02秒中断1次,用于时钟计时
 */
void Timer1_Init()
{
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x10;		//设置定时器模式
	/**
		要定时一秒，直接一步到位，用定时器不行，因为：
		16位定时器的溢出值是65536（2的16次方）
		晶振11.0592MHZ（MHZ，后面乘10的6次方转化为HZ），
		机器周期=1/11059200，
		时钟周期=12*机器周期=12/11059200，
		最多65536 X 12 / 11059200=0.071秒，到不了1秒
		所以，我们这里采用0.02秒 X 50 = 1秒 的方法
		初值计算：
		（65536-x）*12/11059200=0.02
		x=47104（十进制）=B800（十六进制）
		所以，采用T0为模式1（T0十六位定时模式）
		高八倍TH0=0xB8
		第八位TL0=0x00
	 */
	TH1  = 0xB8; //给定时器赋初值 
	TL1  = 0x00; //
	ET1  = 1;    //打开定时器1中断允许
	EA   = 1;    //打开总中断
	TR1  = 1;    //打开定时器
}

void Clock_Init()
{
	 Timer1_Init();
}

void showClock(unsigned char timeHour,unsigned char timeMin,unsigned char timeSecond)
{	
	unsigned char Dig1,Dig2,Dig4,Dig5,Dig7,Dig8;
	unsigned char max7219Map[10] = {0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b};
	
	Dig1 = timeSecond%10;
	Dig2 = timeSecond/10;
	WriteMax7219(Addr_Digit1, max7219Map[Dig1]);
	WriteMax7219(Addr_Digit2, max7219Map[Dig2]);
	WriteMax7219(Addr_Digit3, 0x01); //-
	
	Dig4 = timeMin%10;
	Dig5 = timeMin/10;
	WriteMax7219(Addr_Digit4, max7219Map[Dig4]);
	WriteMax7219(Addr_Digit5, max7219Map[Dig5]);
	WriteMax7219(Addr_Digit6, 0x01); //-
	
	Dig7 = timeHour%10;
	Dig8 = timeHour/10;
	WriteMax7219(Addr_Digit7, max7219Map[Dig7]);
	WriteMax7219(Addr_Digit8, max7219Map[Dig8]);
}


